package com.lyf.boot.modules.system.service.impl;

import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lyf.boot.base.system.entity.SysConfig;
import com.lyf.boot.core.model.PageInfo;
import com.lyf.boot.modules.system.dao.SysConfigDao;
import com.lyf.boot.modules.system.entity.dto.SysConfigDto;
import com.lyf.boot.modules.system.entity.dto.SysConfigPageDto;
import com.lyf.boot.modules.system.entity.vo.SysConfigVo;
import com.lyf.boot.modules.system.service.ISysConfigService;
import com.lyf.boot.utils.MapstructUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author Luyufan
 * @date 2023/8/15 16:36
 */
@Service
@RequiredArgsConstructor
public class SysConfigServiceImpl implements ISysConfigService {

    private final SysConfigDao sysConfigDao;

    @Override
    public PageInfo<SysConfigVo> getSysConfigPage(SysConfigPageDto dto) {
        Page<SysConfigVo> page = dto.of();
        return PageInfo.build(sysConfigDao.selectSysConfigPage(page, dto));
    }

    @Override
    public SysConfigVo getSysConfigInfo(Long configId) {
        return sysConfigDao.selectSysConfigById(configId);
    }

    @Override
    public void saveSysConfig(SysConfigDto dto) {
        //校验key是否已存在
        boolean checkExist = sysConfigDao.exists(Wrappers.<SysConfig>lambdaQuery().eq(SysConfig::getConfigKey, dto.getConfigKey()));
        Assert.isFalse(checkExist, "配置key已存在");
        SysConfig sysConfig = MapstructUtil.convert(dto, SysConfig.class);
        sysConfigDao.insert(sysConfig);
    }

    @Override
    public void updateSysConfig(SysConfigDto dto) {
        SysConfig sysConfigDb = sysConfigDao.selectById(dto.getConfigId());
        Assert.notNull(sysConfigDb, "系统配置不存在");
        if(!StrUtil.equals(sysConfigDb.getConfigKey(), dto.getConfigKey())){
            //校验key是否已存在
            boolean checkExist = sysConfigDao.exists(Wrappers.<SysConfig>lambdaQuery().eq(SysConfig::getConfigKey, dto.getConfigKey()));
            Assert.isFalse(checkExist, "配置key已存在");
        }
        SysConfig sysConfig = MapstructUtil.convert(dto, SysConfig.class);
        sysConfigDao.updateById(sysConfig);
    }

    @Override
    public void deleteSysConfig(List<Long> ids) {
        sysConfigDao.deleteByIds(ids);
    }
}
